package service

import (
	"context"
	"devops-super/api"
	v1 "devops-super/api/configs/v1"
	"devops-super/internal/model/entity"
)

// IDeptConfig 部门配置服务接口
type IDeptConfig interface {
	// Add 添加部门配置
	Add(ctx context.Context, in *entity.DeptConfig) (id uint64, err error)

	// Upt 更新部门配置
	Upt(ctx context.Context, in *entity.DeptConfig) (err error)

	// GetPageLst 分页获取部门配置列表
	GetPageLst(ctx context.Context, in *api.PageLstReq) (out *api.PageLstRes[*entity.DeptConfig], err error)

	// Del 删除部门配置
	Del(ctx context.Context, id uint64) (err error)

	// GetOne 获取单个部门配置
	GetOne(ctx context.Context, id uint64) (out *entity.DeptConfig, err error)

	// GetByDept 按部门获取配置
	GetByDept(ctx context.Context, deptId uint64, groupName string) (out []*entity.DeptConfig, err error)

	// GetGroupConfigs 获取部门配置组
	GetGroupConfigs(ctx context.Context, in *v1.GetDeptGroupConfigsReq) (out *v1.GetDeptGroupConfigsRes, err error)

	// SetGroupConfigs 保存部门配置组
	SetGroupConfigs(ctx context.Context, in *v1.SetDeptGroupConfigsReq) (err error)

	// GetConfigByKey 根据部门ID、分组名和键名获取配置（优先从缓存读取）
	GetConfigByKey(ctx context.Context, deptId int64, groupName string, configKey string) (configValue string, err error)
}

var (
	localDeptConfig IDeptConfig
)

// DeptConfig 获取部门配置服务实例
func DeptConfig() IDeptConfig {
	if localDeptConfig == nil {
		panic("implement not found for interface IDeptConfig, forgot register?")
	}
	return localDeptConfig
}

// RegisterDeptConfig 注册部门配置服务实例
func RegisterDeptConfig(i IDeptConfig) {
	localDeptConfig = i
}
